/**
 * @Author：ming
 * @Date：2023/9/29 1:57 PM
 * @Filename：Lc101
 */

/**
 * @author ming
 */
public class Lc101 {
    public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }

        if(root.left==null&&root.right==null){
            return true;
        }

        TreeNode p = reverse(root.left);
        if(isSame(p,root.right)){
            return true;
        }

        return false;
    }

    //翻转
    public TreeNode reverse(TreeNode root){
        if(root==null){
            return null;
        }

        if(root.left==null&&root.right==null){
            return root;
        }

        TreeNode p = root.left;
        root.left = reverse(root.right);
        root.right=reverse(p);

        return root;
    }

    //判断两树是否相同
    public boolean isSame(TreeNode p,TreeNode q){
        if(p==null&&q==null){
            return true;
        }

        if(p!=null&&q!=null){
            return (q.val==p.val)&&isSame(p.left,q.left)
                    &&isSame(p.right,q.right);

        }

        return false;
    }
}
